package tests;

import java.util.ArrayList;
import org.junit.Test;

import org.junit.Assert;
import modelo.BibliotecaDeCiudades;
import modelo.BibliotecaDeLadrones;
import modelo.BibliotecaDeObjetosRobados;
import modelo.Caso;
import modelo.Ciudad;
import modelo.DiaYHora;
import modelo.Femenino;
import modelo.GeneradorDePistas;
import modelo.Ladron;
import modelo.Policia;
import modelo.Recorrido;
import modelo.Rojo;
import modelo.Tenis;
import modelo.Tiempo;
import modelo.Anillo;
import modelo.Descapotable;

import modelo.excepciones.Durmiendo;


public class TestTiempo {
	
	@Test
	public void testPoliciaViajaYPasaElTiempo(){
		
		DiaYHora lunes7hs = new DiaYHora("Lunes",7);
		DiaYHora domingo17hs = new DiaYHora("Domingo",17);
		
		Tiempo elTiempo = new Tiempo(lunes7hs,domingo17hs);
		
		Policia unPoli = new Policia("Lucia");			
		
		Ladron unLadron = new Ladron("Lady Agatha", new Femenino(), new Tenis(), new Rojo(), new Anillo(), new Descapotable());
		
		BibliotecaDeCiudades ciudades = new BibliotecaDeCiudades();
		ciudades.agregarCiudad("Colombo", 6.928517, 79.854897, "Una descripcion", "Azul", "Peso", new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), "Gobierno", new ArrayList<String>(), "Banco", "Biblioteca", "Puerto");
		ciudades.agregarCiudad("Budapest", 47.498613, 19.030053, "Una descripcion", "Azul", "Peso", new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), "Gobierno", new ArrayList<String>(), "Banco", "Biblioteca", "Puerto");
		ciudades.agregarCiudad("Buenos Aires", -34.577777, -58.455510," ", "Azul", "Peso", new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), new ArrayList<String>(), "Gobierno", new ArrayList<String>(), "Banco", "Biblioteca", "Puerto");
		
		Ciudad ciudadDeSalida = ciudades.obtenerCiudad("Colombo");
		Ciudad ciudadDeLlegada = ciudades.obtenerCiudad("Budapest");
		Ciudad BuenosAires = ciudades.obtenerCiudad("Buenos Aires");
		
		Recorrido unRecorrido = new Recorrido(ciudadDeSalida);
		unRecorrido.agregarCiudad(ciudadDeLlegada);
		unRecorrido.agregarCiudad(BuenosAires);
		
		BibliotecaDeObjetosRobados objetosRobados = new BibliotecaDeObjetosRobados(ciudades);			
		objetosRobados.agregarObjetoRobadoComun("Libro","Colombo");	
		
		BibliotecaDeLadrones ladrones = new BibliotecaDeLadrones();
		
		GeneradorDePistas generadorDePistas = new GeneradorDePistas();
		
		Caso casoActual = new Caso(unLadron, unRecorrido, objetosRobados.obtenerUnObjetoRobadoComun(),  elTiempo, ciudades, generadorDePistas, ladrones);
						
		DiaYHora diaYHoraAntesDeViajar = elTiempo.obtenerDiaYHoraActual();
		Assert.assertEquals("Lunes 07:00 hs", diaYHoraAntesDeViajar.obtenerEnString());
		
		casoActual.policiaViajaA(unPoli.obtenerVelocidad(),ciudadDeLlegada);
		DiaYHora diaYHoraDespuesDeViajar = elTiempo.obtenerDiaYHoraActual();		
		Assert.assertEquals("Lunes " + String.valueOf((7 + ciudadDeSalida.distanciaEnKMCon(ciudadDeLlegada)/unPoli.obtenerVelocidad()) + ":00 hs"), diaYHoraDespuesDeViajar.obtenerEnString());
			
	}
	
	@Test (expected = Durmiendo.class)
	public void testSiElTiempoPasaDespuesDeLas23DeberiaArrojarExcepcionDurmiendo(){
		
		DiaYHora lunes21hs = new DiaYHora("Lunes",21);
		DiaYHora domingo17hs = new DiaYHora("Domingo",17);
		
		Tiempo elTiempo = new Tiempo(lunes21hs,domingo17hs);
		elTiempo.pasaron(4);
		
	}

}
